self-host mail
DNS record
SPF
全名 Sender Policy Framework,用来鉴别发送邮件的服务器或者 IP,是否为该域允许的范围。 这需要在发送邮件的域名下添加一条 TXT 记录,举个例子: example.net. TXT "v=spf1 mx a:pluto.example.net include:aspmx.googlemail.com -all" v=spf1
做开头为必须,spf1 说明这是第一版 spf 协议 SPF 规定有 6 种机制:
- ALL 匹配所有的结果,一般放在最后
- A 匹配所有该域的 A 记录
- MX 匹配所有该域的 MX 记录
- IP4 所有之后的 IPv4 地址,可以用 mask 匹配多项,比如:192.168.0.0/24
- IP6 所有之后的 IPv6 地址,同 IPv4
- INCLUDE 去之后对应地址查找,比如 INCLUDE:spf.34nm.com,就是去 spf.34nm.com 继续查找 TXT/SPF 记录
还有四种修饰符分别意义是:
- “+“:允许,默认记录都是允许
- “-“:不允许
- “~“:中立,也就是没有相关策略
- “?“:同样是中立,但是为 debug
这样例子中 example.net. TXT "v=spf1 mx a:pluto.example.net include:aspmx.googlemail.com -all"
的意思是
mx | 允许所有 MX 记录 |
---|---|
a:pluto.example.net | pluto.example.net 的 A 记录也允许 |
include:aspmx.googlemail.com | 其余记录参考 aspmx.googlemail.com |
-all | 拒绝所有其他记录 |
DKIM
由于 SPF 天生只验证是否可以发信, 不保证这个发信人是验证的,因此,SPF 验证通过的仍然可能是伪造的邮件. 这就需要 DKIM 来进一步保证这封邮件不是伪造的. 在特殊的子域名”\_domainkey”(例如:\_domainkey.example.com)的 TXT 记录中插入一对 RSA 密钥中的公钥, 而 RSA 的私钥用来加密邮件的部分字段. 收到邮件的服务器发现有 DKIM-SIGNATURE 字段时,会自动校验 DKIM 的公钥, 按照匹配程度进行处理. 这样就完成了验证.
+---------------+ +-----------------+ | SenderServer | | ReceiverServer | +---------------+ +-----------------+ | -----------------\ | |-| Calculate DKIM | | | |----------------| | | | | Send singed mail | |--------------------------->| | | | Check DKIM record | |< --------------------------| | | ---------------------------\ | |-| OK, found key and verify | | | |--------------------------| | |
还可以在特殊子域名之上,再建立一堆域名,例如 authmail.\_domainkey.example.com,这样在校验邮件时还可以选择不同的密钥. 协议的内容相对来说就简单很多了,只有三种值:
- v=DKIM1; 使用 DKIM 第一版协议
- k=rsa; 使用 RSA 加密
- p=长长的一段公钥
DMARC
该验证的都验证了,还有个 DMARC 是干吗的呢? 这是为了给域名邮件的拥有者报告垃圾邮件的状况而设定的规则. 和之前的方法一样,在\_dmarc.example.com 下面设定自己的 DMARC 规则, 具体就参考 Google 提供的文档吧.
https://support.google.com/a/answer/2466580?hl=zh-Hans&ref%5C_topic=2759254
self-host service
- Poste.io
- Mailu
- https://mailu.io/1.7/index.html
- Github: https://github.com/Mailu/Mailu
- Demo: https://test.mailu.io/admin admin@test.mailu.io/letmein
- at least 2GB of total memory and 1GB of free memory
- docker-mailserver
- Github: https://github.com/tomav/docker-mailserver
- Recommended: 1-2GB RAM, Minimum 512MB RAM
- NO webpanel
- mailcow
- https://mailcow.email/
- Github: https://github.com/mailcow/mailcow-dockerized
- Demo: https://demo.modoboa.org admin/moohoo
- 3 GiB RAM
- modoboa
- https://modoboa.org/en/
- Demo: https://demo.modoboa.org/
- 2 GB RAM
- Mail-in-a-Box
- Zarafa
- Kopano
- IRedMail
- EwoMail
- https://www.reddit.com/r/selfhosted/comments/bmsum7/selfhosted%5C_email%5C_setup%5C_howto/